package com.java.forum.c_service;

import com.java.forum.a_entity.Collection;
import com.java.forum.a_entity.Subscribe;
import com.java.forum.a_entity.User;

import java.util.List;

public interface UserService {
    /**
     * 登录服务
     *
     * @param uid      用户id
     * @param password 密码
     * @return 用户信息
     */
    User login(Integer uid, String password);

    /**
     * 注册服务
     *
     * @param user 用户对象
     * @return 用户id
     */
    Integer register(User user);

    /**
     * 重置密码,由系统生成随机密码,并返回
     *
     * @param uid   用户id
     * @param email 邮箱
     * @return 密码
     */
    String resetPassword(Integer uid, String email);

    /**
     * 获取用户信息
     *
     * @param uid 用户id
     * @return 用户信息
     */
    User getUserInfo(Integer uid);

    /**
     * 更新用户信息
     *
     * @param user 用户
     */
    void updateUserInfo(User user);

    /**
     * 更新用户邮箱
     *
     * @param user     用户对象
     * @param password 密码
     * @param email    邮箱
     */
    void updateUserEmail(User user, String password, String email);

    /**
     * 更新密码
     *
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @param user        用户对象
     */
    void updatePassword(String oldPassword, String newPassword, User user);

    /**
     * 关注用户
     *
     * @param subscribe 关注对象
     * @return sid  关注id
     */
    Integer SubscribeUser(Subscribe subscribe);

    /**
     * 取消关注用户
     *
     * @param subscribe 关注对象
     */
    void UnSubscribeUser(Subscribe subscribe);

    /**
     * @param GUid
     * @param BUid
     * @return 1为关注，0为未关注
     */
    Integer isSubscribe(int GUid, int BUid);

    /**
     * 获取用户关注列表
     *
     * @param GUid 用户id
     * @return 消息列表
     */
    List<Subscribe> getSubscribeList(int GUid);

    /**
     * 获取用户被关注列表
     *
     * @param BUid 被关注用户id
     * @retrun 被关注列表
     */
    List<Subscribe> getBeSubscribedList(int BUid);

    /**
     * 收藏帖子
     *
     * @param collection 收藏对象
     * @return coid  收藏id
     */
    Integer CollectPost(Collection collection);

    /**
     * 取消收藏帖子
     *
     * @param collection 关注对象
     */
    void UnCollectPost(Collection collection);

    /**
     * 是否收藏帖子
     *
     * @param pid
     * @param uid
     * @return 1为关注，0为未关注
     */
    Integer isCollect(int pid, int uid);

    /**
     * 获取用户关注列表
     *
     * @param uid 用户id
     * @return 收藏列表
     */
    List<Collection> getCollectionList(int uid);
}
